<?php

/**
 * Agendado form.
 *
 * @package    cronos-doctrine
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class AgendadoForm extends BaseAgendadoForm
{
  public $usuario_id;  
  public function configure()
  {
      unset(
              $this['created_at'],
              $this['updated_at'],
              
              $this['descuento_id'],
              $this['cancelacion_id'],
              $this['llamada_servicio_list']
      );

      $this->widgetSchema['empresa_id'] = new sfWidgetFormInputHidden(array(),array('value'=> sfContext::getInstance()->getUser()->getAttribute('agente_user_empresa_id')));
      $this->widgetSchema['parroquia_id'] = new sfWidgetFormInputText();
      $this->widgetSchema['usuario_id'] = new sfWidgetFormInputText();
      $this->widgetSchema['agente_id'] = new sfWidgetFormInputText();
      $this->widgetSchema['zona_id'] = new sfWidgetFormInputText();
      $this->widgetSchema['bitacora'] = new sfWidgetFormInputHidden();
      
      
      //Usuario Servicio      
      $servicios = $this->getObject()->getServicio();
      
      if(!count($servicios)) {
          $servicios = array();
      }
      
      $servicios_form = new sfForm();
      $count = 0;
      
      if($this->isNew()){         
        
        /*$servicio = new Servicio();
        $servicio->setAgendado($this->getObject());

        $servicio_form = new ServicioForm($servicio);
        $servicios_form->embedForm($count, $servicio_form);
        $count++;
        array_push ($servicios, $servicio);*/
      
        
      } else {

        foreach ($servicios as $servicio){
            $servicio_form = new ServicioForm($servicio);
            $servicios_form->embedForm($count, $servicio_form);
            $count++;
             
      } }
      $this->embedForm('servicios', $servicios_form);
  }
  
  public function addServicios($num, $cantidad=0, $servicio_tipo_id=0, $categoria_id=0, $producto_id=0, $marca_id=0, $tamano_id=0, $presentacion_id = 0, $nota='', $mascota_list_Array = '', $mascota_tam_Array= '') {
       
      
      
      
      $det = new Servicio();
      $det->setEmpresaId(sfContext::getInstance()->getUser()->getAttribute('agente_user_empresa_id'));
      $det->setAgendado($this->getObject());
      $det->setCantidad($cantidad);

      $det->setServicioTipoId($servicio_tipo_id);
      $det->setNota($nota);
      
      if($producto_id) {
          $producto = $det->getProducto()->getTable()->getProductoFinal($producto_id);
          $det->setProducto($producto);
          
          if($tamano_id){
            $precio = $det->getProducto()->getTable()->getProductoPrecio($producto_id, $tamano_id);
           
            if($precio){
                $det->setPrecio($precio->getPrecio() * $cantidad);
                $det->setPuntos($precio->getPuntosRegalo());
                if($precio->getIsImpuesto()){
                    $empresa = new Empresa();
                    $empresa = $empresa->getEmpresa();
                    $det->setImpuestos((($precio->getPrecio()*$empresa->getIva())/100)* $cantidad);
                }
                $det->setPuntos($precio->getPuntosRegalo() * $cantidad);
            }
            
          }else {
                $categoria = new Categoria();
                $categoria = $categoria->getCategoriaPorId($categoria_id);
                if($categoria->getTipoId()==2) { 
               
                    $precioSum = 0;
                    $puntoSum = 0;
                    $impuestoSum = 0;                    
                    $cantidad = 0;
                    
                    for($i=0;$i<=count($mascota_list_Array);$i++){

                            if(!empty($mascota_list_Array[$i])) {                        
                                $precio = $det->getProducto()->getTable()->getProductoPrecio($producto_id, $mascota_tam_Array[$i]);
                                $precioSum +=$precio->getPrecio();
                                $puntoSum  += $precio->getPuntosRegalo();
                                $cantidad +=1;
                                if($precio->getIsImpuesto()){
                                    $empresa = new Empresa();
                                    $empresa = $empresa->getEmpresa();
                                    $impuestoSum += ($precio->getPrecio()*$empresa->getIva())/100;                                    
                                }

                            };                   
                    }
                    
                    
                    $det->setCantidad($cantidad);
                    $det->setPrecio($precioSum);
                    $det->setPuntos($puntoSum);
                    $det->setImpuestos($impuestoSum);
                }if($categoria->getTipoId()==1){ 
                    if($presentacion_id) {
                        $productoPrecio = new ProductoPrecio();
                        $precio = $productoPrecio->getPrecioProductoFinalId($presentacion_id);
                        $det->setPrecio($precio->getPrecio() * $cantidad);
                        $det->setPuntos($precio->getPuntosRegalo() * $cantidad);
                        if($precio->getIsImpuesto()){
                            $empresa = new Empresa();
                            $empresa = $empresa->getEmpresa();
                            $det->setImpuestos((($precio->getPrecio()*$empresa->getIva())/100)* $cantidad);
                        }
                                       
                    }else {
                        $precio = $producto->getProductoPrecio()->getFirst();
                        $det->setPrecio($precio->getPrecio() * $cantidad);
                        $det->setPuntos($precio->getPuntosRegalo() * $cantidad);
                        if($precio->getIsImpuesto()){
                                $empresa = new Empresa();
                                $empresa = $empresa->getEmpresa();
                                $det->setImpuestos((($precio->getPrecio()*$empresa->getIva())/100)* $cantidad);
                            }
                        }
                }
          }
      }
      
      $det_form = new ServicioForm($det);
      
      if($servicio_tipo_id) {
        $det_form->categoriaSelect($servicio_tipo_id);
      }
      if($categoria_id){
        $det_form->productoSelect($categoria_id, $marca_id, $tamano_id, $producto_id, $presentacion_id, $mascota_list_Array);  
      }
        
      //$det_form->widgetSchema['servicio_tipo_id']->setValue($servicio_tipo_id);
      $this->embeddedForms['servicios']->embedForm($num, $det_form);
      $this->embedForm('servicios', $this->embeddedForms['servicios']);      
  }
  
  public function addProductos($num, $cantidad=0, $servicio_tipo_id=0, $categoria_id=0, $producto_id=0, $marca_id=0, $tamano_id=0, $presentacion_id = 0, $nota='', $mascota_list_Array = '', $mascota_tam_Array= '') {
       
      
      $det = new Servicio();
      $det->setAgendado($this->getObject());
      $det->setCantidad($cantidad);
      $det->setEmpresaId(sfContext::getInstance()->getUser()->getAttribute('agente_user_empresa_id'));
      $det->setNota($nota);
      
      
      if($producto_id) {
          $producto = $det->getProducto()->getTable()->getProductoFinal($producto_id);
          $det->setProducto($producto);
          
          if($tamano_id){
            $precio = $det->getProducto()->getTable()->getProductoPrecio($producto_id, $tamano_id);
           
            if($precio){
                $det->setPrecio($precio->getPrecio() * $cantidad);
                $det->setPuntos($precio->getPuntosRegalo());
                if($precio->getIsImpuesto()){
                    $empresa = new Empresa();
                    $empresa = $empresa->getEmpresa();
                    $det->setImpuestos((($precio->getPrecio()*$empresa->getIva())/100)* $cantidad);
                }
                $det->setPuntos($precio->getPuntosRegalo() * $cantidad);
            }
            
          }else {
                $categoria = new Categoria();
                $categoria = $categoria->getCategoriaPorId($categoria_id);
                if($categoria->getTipoId()==2) { 
               
                    $precioSum = 0;
                    $puntoSum = 0;
                    $impuestoSum = 0;                    
                    $cantidad = 0;
                    
                    for($i=0;$i<=count($mascota_list_Array);$i++){

                            if(!empty($mascota_list_Array[$i])) {                        
                                $precio = $det->getProducto()->getTable()->getProductoPrecio($producto_id, $mascota_tam_Array[$i]);
                                $precioSum +=$precio->getPrecio();
                                $puntoSum  += $precio->getPuntosRegalo();
                                $cantidad +=1;
                                if($precio->getIsImpuesto()){
                                    $empresa = new Empresa();
                                    $empresa = $empresa->getEmpresa();
                                    $impuestoSum += ($precio->getPrecio()*$empresa->getIva())/100;                                    
                                }

                            };                   
                    }
                    
                    $det->setCantidad($cantidad);
                    $det->setPrecio($precioSum);
                    $det->setPuntos($puntoSum);
                    $det->setImpuestos($impuestoSum);
                }if($categoria->getTipoId()==1){ 
                    if($presentacion_id) {
                        $productoPrecio = new ProductoPrecio();
                        $precio = $productoPrecio->getPrecioProductoFinalId($presentacion_id);
                        $det->setPrecio($precio->getPrecio() * $cantidad);
                        $det->setPuntos($precio->getPuntosRegalo() * $cantidad);
                        if($precio->getIsImpuesto()){
                            $empresa = new Empresa();
                            $empresa = $empresa->getEmpresa();
                            $det->setImpuestos((($precio->getPrecio()*$empresa->getIva())/100)* $cantidad);
                        }
                                       
                    }else {
                        $precio = $producto->getProductoPrecio()->getFirst();
                        $det->setPrecio($precio->getPrecio() * $cantidad);
                        $det->setPuntos($precio->getPuntosRegalo() * $cantidad);
                        if($precio->getIsImpuesto()){
                                $empresa = new Empresa();
                                $empresa = $empresa->getEmpresa();
                                $det->setImpuestos((($precio->getPrecio()*$empresa->getIva())/100)* $cantidad);
                            }
                        }
                }
          }
      }
      
      $det_form = new ServicioForm($det);
      
      if($servicio_tipo_id) {
        $det_form->categoriaSelect($servicio_tipo_id);
      }
      if($categoria_id){
        $det_form->productoSelect($categoria_id, $marca_id, $tamano_id, $producto_id, $presentacion_id, $mascota_list_Array);  
      }
        
      //$det_form->widgetSchema['servicio_tipo_id']->setValue($servicio_tipo_id);
      $this->embeddedForms['servicios']->embedForm($num, $det_form);
      $this->embedForm('servicios', $this->embeddedForms['servicios']);      
  }
  
  public function  bind(array $taintedValues = null, array $taintedFiles = null) {

   if(isset($taintedValues['servicios'])){
        foreach ($taintedValues['servicios'] as $key => $newPre)
        {

            if(!isset ($this['servicios'][$key])){
                $this->addServicios($key);

            }
        }
   }
    
     parent::bind($taintedValues, $taintedFiles);
    }
//    
//  public function saveMascotaList($con = null)
//  {
//    if (!$this->isValid())
//    {
//      throw $this->getErrorSchema();
//    }
//
//    if (!isset($this->widgetSchema['mascota_list']))
//    {
//      // somebody has unset this widget
//      return;
//    }
//
//    if (null === $con)
//    {
//      $con = $this->getConnection();
//    }
//
//    $existing = $this->object->Mascota->getPrimaryKeys();
//    $values = $this->getValue('mascota_list');
//    if (!is_array($values))
//    {
//      $values = array();
//    }
//
//    $unlink = array_diff($existing, $values);
//    if (count($unlink))
//    {
//      $this->object->unlink('Mascota', array_values($unlink));
//    }
//
//    $link = array_diff($values, $existing);
//    if (count($link))
//    {
//      $this->object->link('Mascota', array_values($link));
//    }
//  }
}

